home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1991: Code Warrior / bincue / Code Warrior.bin / Tools & Apps (Moof!) / OS⁄Toolbox / HyperMenus / PopUpMenuSelect.c < prev    next >
Encoding:
Text File  |  1990-07-23  |  1.3 KB  |  85 lines  |  [TEXT/MPS ]

  1. //
  2. //        © Copyright 1990 Apple Computer, Inc.   By Ricardo Batista
  3. //
  4.  
  5. #include "Types.h"
  6. #include "Memory.h"
  7. #include "Menus.h"
  8. #include "Packages.h"
  9. #include "HyperXCMD.h"
  10.  
  11.  
  12. void GetHLong(Handle H, long *s);
  13. Handle SetHLong(long num);
  14.  
  15. pascal void MAIN(XCmdPtr xcmd)
  16. {
  17.     long num, top, left, popItem;
  18.     long newItem;
  19.     WindowPtr w;
  20.     GrafPtr savePort;
  21.     Point where;
  22.     
  23.     if (xcmd->paramCount != 4)
  24.         return;
  25.     GetHLong(xcmd->params[0], &num);
  26.     if (!num)
  27.         return;
  28.     GetHLong(xcmd->params[1], &top);
  29.     GetHLong(xcmd->params[2], &left);
  30.     GetHLong(xcmd->params[3], &popItem);
  31.     w = FrontWindow();
  32.     GetPort(&savePort);
  33.     if (w)
  34.         SetPort(w);
  35.     where.h = left;
  36.     where.v = top;
  37.     LocalToGlobal(&where);
  38.     newItem = PopUpMenuSelect((MenuHandle) num, where.v, where.h,
  39.                 (short) popItem);
  40.     SetPort(savePort);
  41.     newItem &= 0x0000FFFF;
  42.     xcmd->returnValue = SetHLong(newItem);
  43. }
  44.  
  45.  
  46. void GetHLong(Handle H, long *s)
  47. {
  48.     short len;
  49.     char st[256];
  50.     
  51.     *s = 0L;
  52.     HLock(H);
  53.     len = (short) GetHandleSize(H);
  54.     if (len > 255)
  55.         len = 255;
  56.     BlockMove(*H, &st[1], (long) len);
  57.     HUnlock(H);
  58.     len = 1;
  59.     while (st[len])
  60.         len++;
  61.     st[0] = len - 1;
  62.     StringToNum(st, s);
  63. }
  64.  
  65.  
  66. Handle SetHLong(long num)
  67. {
  68.     Handle H;
  69.     char st[60];
  70.     short len;
  71.     
  72.     NumToString(num, st);
  73.     len = st[0];
  74.     H = NewHandle((long) len);
  75.     if (H) {
  76.         HLock(H);
  77.         BlockMove(&st[1], *H, (long) len);
  78.         (*H)[len] = 0;
  79.     }
  80.     return(H);
  81. }
  82.  
  83.  
  84.  
  85.